/**
 * Classe TabelaNotaDoSite
 * Nesta classe contém os métodos utilizados para a manipulação
 * da tabela que contém as notas dos sites preditores.
 */
package epibot.BancoDeDados;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Rafael Tosta
 */
public class TabelaNotaDoSite extends SQLiteEpibot {

    private Statement stm = null;

    public TabelaNotaDoSite() {
        stm = getBD();
    }

    /** 
     * Insere os valores na tabela
     *
     * @param idSite Identificador do site
     * @param nota Nota do site
     * @param stm Conexão com o banco de dados
     */
    public void insert(String nomeCalibragem, String idSite, String nota, String alelo, String tamanho) {
        try {

            String sql = "insert into notasdosite (nome_calibragem,id_site,nota,alelo,tamanho)"
                    + "values ('" + nomeCalibragem + "'," + idSite + ",'" + nota + "','" + alelo + "','" + tamanho + "')";

            stm.executeUpdate(sql);
        } catch (SQLException ex) {
            System.out.println(ex.getMessage() + " metodo insert : TabelaNotaSite ");
        }
    }

    /**
     * Remove todas as linhas da tabela onde é encontrado o nomde da calibragem informado
     *
     * @param nomeCalibragem Nome da calibragem associado
     * @param stm Conexão com o banco de dados
     */
    public void delete(String nomeCalibragem) {

        String sql = "delete From notasdosite"
                + " where nome_calibragem = '" + nomeCalibragem + "' ";
        try {
            stm.executeUpdate(sql);
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
    }

    /**
     * Retorna a nota do site
     *
     * @param nomeCalibragem Nome da calibragem
     * @param id_site Identificador do site
     * @param stm Conexão com o banco de dados
     * @return Nota do Site
     */
    public String getNota(String nomeCalibragem, String id_site) {
        String x = "null";
        try {
            ResultSet executeQuery = stm.executeQuery("SELECT nota FROM notasdosite where nome_calibragem = '" + nomeCalibragem + "' "
                    + "and id_site = " + id_site);

            while (executeQuery.next()) {
                //System.out.println(executeQuery.getString("nota"));
                x = executeQuery.getString("nota");
            }
            executeQuery.close();
        } catch (SQLException ex) {
            Logger.getLogger(TabelaNotaDoSite.class.getName()).log(Level.SEVERE, null, ex);
        }
        return x;
    }

    /**
     * Retorna a nota e o identificador de um site
     *
     * @param nomeCalibragem Nome da calibragem
     * @param stm Conexão com o banco de dados
     * @return Lista com nota e identificador separado por virgula em cada posição
     */
    public ArrayList<String> getNotaIdSite(String nomeCalibragem) {
        ArrayList<String> x = new ArrayList<String>();
        try {
            ResultSet executeQuery = stm.executeQuery("SELECT * FROM notasdosite where nome_calibragem = '" + nomeCalibragem + "'");

            while (executeQuery.next()) {
                x.add(executeQuery.getString("nota") + "," + executeQuery.getString("id_site"));
            }
            executeQuery.close();
        } catch (SQLException ex) {
            Logger.getLogger(TabelaNotaDoSite.class.getName()).log(Level.SEVERE, null, ex);
        }
        return x;
    }

    /**
     * Retorna todos os identificadores da tabela
     *
     * @param nomeCalibragem Nome da calibragem
     * @param stm Conexão com o banco de dados
     * @return Lista com todos os identificadores da tabela
     */
    public ArrayList<String> getTodosIdSite(String nomeCalibragem) {
        ArrayList<String> x = new ArrayList<String>();
        try {
            ResultSet executeQuery = stm.executeQuery("SELECT id_site FROM notasdosite where nome_calibragem = '" + nomeCalibragem + "'");

            while (executeQuery.next()) {
                x.add(executeQuery.getString("id_site"));
            }
            executeQuery.close();
        } catch (SQLException ex) {
            Logger.getLogger(TabelaNotaDoSite.class.getName()).log(Level.SEVERE, null, ex);
        }
        return x;
    }

    /**
     * Retorna todos os nomes de calibradores existente na tabel
     *
     * @param stm Conexão com o banco de dados
     * @return Lista com os nomes dos calibradores
     */
    public ArrayList<String> getAllNomesCalibragem() {
        ArrayList<String> calibradores = new ArrayList<String>();
        String s;

        String sql = "SELECT nome_calibragem,count(*)FROM notasdosite WHERE nome_calibragem <> '' "
                + " GROUP BY nome_calibragem HAVING COUNT(*) > 0";

        try {
            ResultSet executeQuery = stm.executeQuery(sql);
            while (executeQuery.next()) {
                s = executeQuery.getString("nome_calibragem");
                calibradores.add(s);
            }
            executeQuery.close();
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return calibradores;
    }

    public String getAleloTamanho(String nomeCalibragem) {
        String s = "";
        String sql = "SELECT * FROM notasdosite "
                + "where nome_calibragem = '" + nomeCalibragem + "';";
        try {
            ResultSet executeQuery = stm.executeQuery(sql);

            while (executeQuery.next()) {

                String x = executeQuery.getString("alelo") + "," + executeQuery.getString("tamanho");
                if (!s.equals(x)) {
                    s = x;
                }
            }
            executeQuery.close();
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return s;
    }

    public boolean isEmpty() {
        String sql = "select nome_calibragem From notasdosite";

        try {
            ResultSet executeQuery = stm.executeQuery(sql);
            while (executeQuery.next()) {

                executeQuery.getString("nome_calibragem");
                return true;
            }


        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return false;
    }
}
